c7bbeeea7b05de5b5e7a60ddc46117a38f6284d9,connector/src/main/java/org/jboss/as/connector/subsystems/datasources/DataSourceEnable.java,DataSourceEnable,execute,#OperationContext#ModelNode#,58

Before Change


        }

        if (context.getType() == OperationContext.Type.SERVER) {
            context.addStep(new OperationStepHandler() {
                public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {

                    final ModelNode address = operation.require(OP_ADDR);
                    final String dsName = PathAddress.pathAddress(address).getLastElement().getValue();

                    final ServiceRegistry registry = context.getServiceRegistry(true);

                    if (isXa()) {
                        final ServiceName dataSourceConfigServiceName = XADataSourceConfigService.SERVICE_NAME_BASE
                                .append(dsName);
                        final ServiceController<?> dataSourceConfigController = registry
                                .getService(dataSourceConfigServiceName);
                        if (dataSourceConfigController != null) {
                            ((XaDataSource) dataSourceConfigController.getValue()).setEnabled(true);

                        }
                    } else {
                        final ServiceName dataSourceConfigServiceName = DataSourceConfigService.SERVICE_NAME_BASE
                                .append(dsName);
                        final ServiceController<?> dataSourceConfigController = registry
                                .getService(dataSourceConfigServiceName);
                        if (dataSourceConfigController != null) {
                            ((DataSource) dataSourceConfigController.getValue()).setEnabled(true);

                        }
                    }

                    final ServiceName dataSourceServiceName = AbstractDataSourceService.SERVICE_NAME_BASE.append(dsName);
                    final ServiceController<?> dataSourceController = registry.getService(dataSourceServiceName);
                    if (dataSourceController != null) {
                        if (!ServiceController.State.UP.equals(dataSourceController.getState())) {
                            dataSourceController.setMode(ServiceController.Mode.ACTIVE);
                        } else {
                            throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source", dsName)));
                        }
                    } else {
                        throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source", dsName)));
                    }

                    final ServiceName referenceServiceName = DataSourceReferenceFactoryService.SERVICE_NAME_BASE.append(dsName);
                    final ServiceController<?> referenceController = registry.getService(referenceServiceName);
                    if (referenceController != null && !ServiceController.State.UP.equals(referenceController.getState())) {
                        referenceController.setMode(ServiceController.Mode.ACTIVE);
                    }

                    final ServiceName binderServiceName = ContextNames.bindInfoFor(dsName).getBinderServiceName();
                    final ServiceController<?> binderController = registry.getService(binderServiceName);
                    if (binderController != null && !ServiceController.State.UP.equals(binderController.getState())) {
                        binderController.setMode(ServiceController.Mode.ACTIVE);
                    }
                    context.completeStep();
                }
            }, OperationContext.Stage.RUNTIME);
        }
        context.completeStep();
    }

After Change



        if (context.getType() == OperationContext.Type.SERVER) {

            context.addStep(new OperationStepHandler() {
                public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
                    final ServiceTarget serviceTarget = context.getServiceTarget();
                    final ServiceVerificationHandler verificationHandler = new ServiceVerificationHandler();

                    final ModelNode address = operation.require(OP_ADDR);
                    final String dsName = PathAddress.pathAddress(address).getLastElement().getValue();
                    final String jndiName = model.get(JNDINAME.getName()).asString();
                    final ServiceRegistry registry = context.getServiceRegistry(true);

                    final List<ServiceName> serviceNames = registry.getServiceNames();


                    if (isXa()) {
                        final ModifiableXaDataSource dataSourceConfig;
                        try {
                            dataSourceConfig = xaFrom(context, model);
                        } catch (ValidateException e) {
                            throw new OperationFailedException(e, new ModelNode().set(MESSAGES.failedToCreate("XaDataSource", operation, e.getLocalizedMessage())));
                        }
                        final ServiceName xaDataSourceConfigServiceName = XADataSourceConfigService.SERVICE_NAME_BASE.append(dsName);
                        final XADataSourceConfigService configService = new XADataSourceConfigService(dataSourceConfig);

                        final ServiceBuilder<?> builder = serviceTarget.addService(xaDataSourceConfigServiceName, configService);
                        builder.addListener(verificationHandler);

                        for (ServiceName name : serviceNames) {
                            if (xaDataSourceConfigServiceName.isParentOf(name) && !xaDataSourceConfigServiceName.equals(name)) {
                                final ServiceController<?> xaConfigProperyController = registry.getService(name);

                                if (xaConfigProperyController != null) {
                                    if (! ServiceController.State.UP.equals(xaConfigProperyController.getState())) {
                                        xaConfigProperyController.setMode(ServiceController.Mode.ACTIVE);
                                    } else {
                                        throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source.xa-config-property", name)));
                                    }
                                } else {
                                    throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source.xa-config-property", name)));
                                }
                            }
                        }
                        builder.install();

                    } else {

                        final ModifiableDataSource dataSourceConfig;
                        try {
                            dataSourceConfig = from(context, model);
                        } catch (ValidateException e) {
                            e.printStackTrace();
                            throw new OperationFailedException(e, new ModelNode().set(MESSAGES.failedToCreate("DataSource", operation, e.getLocalizedMessage())));
                        }
                        final ServiceName dataSourceCongServiceName = DataSourceConfigService.SERVICE_NAME_BASE.append(dsName);
                        final DataSourceConfigService configService = new DataSourceConfigService(dataSourceConfig);

                        final ServiceBuilder<?> builder = serviceTarget.addService(dataSourceCongServiceName, configService);
                        builder.addListener(verificationHandler);



                        for (ServiceName name : serviceNames) {
                            if (dataSourceCongServiceName.isParentOf(name) && !dataSourceCongServiceName.equals(name)) {
                                final ServiceController<?> dataSourceController = registry.getService(name);

                                if (dataSourceController != null) {
                                    if (!ServiceController.State.UP.equals(dataSourceController.getState())) {
                                        dataSourceController.setMode(ServiceController.Mode.ACTIVE);
                                    } else {
                                        throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source.connectionProperty", name)));
                                    }
                                } else {
                                    throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source.connectionProperty", name)));
                                }
                            }
                        }
                        builder.install();


                    }
                    context.completeStep();
                }
            }, OperationContext.Stage.RUNTIME);

            context.addStep(new OperationStepHandler() {
                public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
                    final ServiceTarget serviceTarget = context.getServiceTarget();
                    final ServiceVerificationHandler verificationHandler = new ServiceVerificationHandler();

                    final ModelNode address = operation.require(OP_ADDR);
                    final String dsName = PathAddress.pathAddress(address).getLastElement().getValue();
                    final String jndiName = model.get(JNDINAME.getName()).asString();
                    final ServiceRegistry registry = context.getServiceRegistry(true);

                    final ServiceName dataSourceServiceName = AbstractDataSourceService.SERVICE_NAME_BASE.append(dsName);

                    final List<ServiceName> serviceNames = registry.getServiceNames();


                    final ServiceController<?> dataSourceController = registry.getService(dataSourceServiceName);

                    if (dataSourceController != null) {
                        if (!ServiceController.State.UP.equals(dataSourceController.getState())) {
                            dataSourceController.setMode(ServiceController.Mode.ACTIVE);
                        } else {
                            throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source", dsName)));
                        }
                    } else {
                        throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source", dsName)));
                    }

                    final DataSourceReferenceFactoryService referenceFactoryService = new DataSourceReferenceFactoryService();
                    final ServiceName referenceFactoryServiceName = DataSourceReferenceFactoryService.SERVICE_NAME_BASE
                            .append(dsName);
                    final ServiceBuilder<?> referenceBuilder = serviceTarget.addService(referenceFactoryServiceName,
                            referenceFactoryService).addDependency(dataSourceServiceName, javax.sql.DataSource.class,
                            referenceFactoryService.getDataSourceInjector());

                    referenceBuilder.install();

                    final ContextNames.BindInfo bindInfo = ContextNames.bindInfoFor(jndiName);
                    final BinderService binderService = new BinderService(bindInfo.getBindName());
                    final ServiceBuilder<?> binderBuilder = serviceTarget
                            .addService(bindInfo.getBinderServiceName(), binderService)
                            .addDependency(referenceFactoryServiceName, ManagedReferenceFactory.class, binderService.getManagedObjectInjector())
                            .addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, binderService.getNamingStoreInjector()).addListener(new AbstractServiceListener<Object>() {
                                public void transition(final ServiceController<? extends Object> controller, final ServiceController.Transition transition) {
                                    switch (transition) {
                                        case STARTING_to_UP: {
                                            SUBSYSTEM_DATASOURCES_LOGGER.boundDataSource(jndiName);
                                            break;
                                        }
                                        case START_REQUESTED_to_DOWN: {
                                            SUBSYSTEM_DATASOURCES_LOGGER.unboundDataSource(jndiName);
                                            break;
                                        }
                                        case REMOVING_to_REMOVED: {
                                            SUBSYSTEM_DATASOURCES_LOGGER.debugf("Removed JDBC Data-source [%s]", jndiName);
                                            break;
                                        }
                                    }
                                }
                            });
                    binderBuilder.setInitialMode(ServiceController.Mode.ACTIVE)
                            .addListener(verificationHandler);
                    binderBuilder.install();

                    context.completeStep();
                }
            }, OperationContext.Stage.RUNTIME);
        }
        context.completeStep();
    }